package com.sskj.mine.http;

import com.lzy.okgo.request.GetRequest;
import com.lzy.okgo.request.PostRequest;
import com.sskj.common.base.HttpData;
import com.sskj.lib.bean.PageBean;
import com.sskj.lib.bean.UserData;
import com.sskj.mine.bean.AboutUsBean;
import com.sskj.mine.bean.AddressList;
import com.sskj.mine.bean.AssetBean;
import com.sskj.mine.bean.CoinFeeBean;
import com.sskj.mine.bean.CustomListBean;
import com.sskj.mine.bean.FbShop;
import com.sskj.mine.bean.ImgUrlBean;
import com.sskj.mine.bean.LockHouseBean;
import com.sskj.mine.bean.OtherRecordBean;
import com.sskj.mine.bean.PayWayBean;
import com.sskj.mine.bean.QrCodeBean;
import com.sskj.mine.bean.RechargeInfoBean;
import com.sskj.mine.bean.RechargeListBean;
import com.sskj.mine.bean.SysBean;
import com.sskj.mine.bean.TeamBean;
import com.sskj.mine.bean.UserAgreeMent;

import java.io.File;
import java.util.List;
import java.util.concurrent.ForkJoinPool;


/**
 * 作者 :吕志豪
 * 简书：https://www.jianshu.com/u/6e525b929aac
 * github：https://github.com/lvzhihao100
 * 描述：
 * 创建时间：2018-10-15 14:08
 */
public interface IHttpService {


    /**
     * 手机号注册
     *
     * @param account        手机号
     * @param pswd           密码
     * @param code           验证码
     * @param invitationCode 邀请码
     * @return
     */
    PostRequest<HttpData> register(String account, String pswd, String pswd1, String code, String invitationCode);


    /**
     * 获取短信验证码---codeType 1代表注册  2代表重置密码
     *
     * @param mobile 手机号
     * @param type
     * @return
     */
    PostRequest<HttpData> sendCode(String mobile, String type);


    /**
     * 登录
     *
     * @param pswd    密码
     * @param account 账号
     * @return
     */
    PostRequest<HttpData<UserData>> login(String account, String pswd);


    /**
     * 邮箱注册
     *
     * @param email          邮箱号
     * @param pswd           密码
     * @param code           验证码
     * @param invitationCode 邀请码
     * @return
     */
    PostRequest<HttpData> registerEmail(String email, String pswd, String code, String invitationCode);


    /**
     * 获取邮箱验证码---codeType 1代表注册  2代表重置密码
     *
     * @param email 邮箱号
     * @return
     */
    PostRequest<HttpData> sendEmailCode(String email);


    PostRequest<HttpData> sendEmailCode1(String email);

    /**
     * 验证验证码
     */
    PostRequest<HttpData> checkCode(String mobile, String code, String type);


    /**
     * 获取注册协议
     *
     * @return
     */
    GetRequest<HttpData<UserAgreeMent>> getXieyi();


    /**
     * 获取注册协议
     *
     * @return
     */
    GetRequest<HttpData<QrCodeBean>> getUrlCode();


    /**
     * 邮箱号重置密码
     *
     * @param pswd   登录密码
     * @param pswd1  确认登录密码
     * @param code   验证码
     * @param mobile 用户账号/邮箱
     * @return
     */
    PostRequest<HttpData> resetPwdWithEmail(String pswd, String pswd1, int code, String mobile);


    /**
     * 手机号重置密码
     *
     * @param code    验证码
     * @param pswd    新密码
     * @param account 账号
     * @return
     */
    PostRequest<HttpData> resetPwd(String code, String pswd, String account);


    /**
     * 设置支付密码
     *
     * @param code     验证码
     * @param tradePwd 支付密码
     * @return
     */
    PostRequest<HttpData> setPayPwd(String code, String tradePwd, String mobile);


    /**
     * 上传图片
     *
     * @param file 文件
     * @return
     */
    PostRequest<HttpData<ImgUrlBean>> uploadImg(File file);


    /**
     * 绑定邮箱
     *
     * @param code  验证码
     * @param email 邮箱号
     * @return
     */
    PostRequest<HttpData> bindEmail(String code, String email);


    /**
     * 实名认证
     *
     * @param username       用户名
     * @param idCardNo       身份证号
     * @param idCardFrontImg 前身份证
     * @param idCardBackImg  后身份证
     * @param selfieImg      手持
     * @return
     */
    PostRequest<HttpData> verify(String username, String idCardNo, String idCardFrontImg, String idCardBackImg, String selfieImg, String type, String account);

    /**
     * 实名认证
     *
     * @param cardNum  证件号
     * @param realName 真实姓名
     * @param type     认证类型 1 身份证 2 护照
     * @param cardimg1 身份证正面/护照
     * @param cardimg2 身份证反面
     * @param cardimg3 手持身份证
     * @return
     */
    PostRequest<HttpData> realNameVerify(String cardNum, String realName, int type, String cardimg1, String cardimg2, String cardimg3);


    /**
     * 获取资产列表
     *
     * @return
     */
    PostRequest<HttpData<AssetBean>> getAssets();


    /**
     * 获取提现手续费
     *
     * @param code 币种码
     * @return
     */
    PostRequest<HttpData<CoinFeeBean>> getWithdrawFee(String code);


    /**
     * 充值
     *
     * @param code 币种码
     * @return
     */
    GetRequest<HttpData<RechargeInfoBean>> recharge(String code);


    /**
     * 提现
     *
     * @param code       验证码
     * @param tradePwd   支付密码
     * @param usdFee     金额
     * @param walletAddr 钱包地址
     * @param stockCode  币种码
     * @return
     */
    PostRequest<HttpData> withdraw(String code, String tradePwd, String usdFee, String walletAddr, String stockCode, String account);


    /**
     * 冲提币记录
     *
     * @return
     */
    GetRequest<HttpData<PageBean<RechargeListBean>>> getAssetRecord(int page, int pageSize, String type, String stockCode);

    /**
     * 其他记录
     *
     * @return
     */
    PostRequest<HttpData<PageBean<OtherRecordBean>>> getOtherRecord(int page, int pageSize, String stockCode);


    /**
     * 添加钱包地址
     *
     * @param type   类型 ETH 1，BTC 2，BCH 3
     * @param addr   钱包地址
     * @param code   币种码
     * @param remark 备注
     * @return
     */
    PostRequest<HttpData> addWalletAddress(String type, String addr, String code, String remark);


    /**
     * 获取钱包列表
     *
     * @return
     */
    GetRequest<HttpData<AddressList>> getWalletList();


    /**
     * 删除钱包地址
     *
     * @param id 钱包地址Id
     * @return
     */
    PostRequest<HttpData> delWalletAddress(String id);

    PostRequest<HttpData> changePwd(String originPwd, String newPwd, String newPwdAgain);

    PostRequest<HttpData> bindMobile(String mobile, String code);

    GetRequest<HttpData<AboutUsBean>> getSys();

    /**
     * 安全中心---支付列表
     */
    GetRequest<HttpData<PayWayBean>> getPayType();

    PostRequest<HttpData<LockHouseBean>> getLockHouseType(String pid);

    PostRequest<HttpData> commitLockHouse(String id, String num, String tpwd);

    PostRequest<HttpData> addPayWay(
            String payId, String payType, String tradePwd, String wxAccount, String wxImg
            , String alipayAccount, String aliImg, String bankCardNo, String bankCardOpenBank
            , String bankCardType, String name, String palAccount);

    /**
     * 安全中心---申请成为商家
     */
    PostRequest<HttpData> applyShop(String status);

    PostRequest<HttpData<Object>> togglePayType(String type, String val);

    /**
     * 安全中心---成为商家所要冻结保证金
     */
    PostRequest<HttpData<List<FbShop>>> moneyUsed(String name, String type);

    PostRequest<HttpData<PageBean<CustomListBean>>> myClient(int page);

    PostRequest<HttpData<TeamBean>> clientNum();
}